import express from 'express';
import Redis from 'ioredis'
import fs from 'node:fs';

const app = express();

const redis = new Redis();

// 读取lua脚本
let lua = fs.readFileSync('./index.lua', 'utf8')

// 限流阀   控制访问速率，控制访问次数，控制并发数， 控制访问量等等
// 往redis一个值，每访问一次值加一，固定时间内访问次数超过一定的值(阈值)，就提示不要频繁操作
const KEY = 'lottery'   // 设置KEY
const TIME = 30       // 设置时间 秒
const LIMIT = 5      // 设置阈值

// 允许跨域的中间件
app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    next();
})

app.get('/lottery', (req, res) => {
    // redis.eval('local a=2')  // 这样可以直接在redis中写lua脚本
    // 第二个参数是有几个KEY， 后面的当参数传进去（到lua脚本文件中），lua中用 KEYS去接收Key, 通过 ARGV 接收参数 
    redis.eval(lua, 1, KEY, TIME, LIMIT, (err, data) => {
        if(err) {
            console.log(err);
            res.send('系统错误')
        }
        if(data == 0) {
            res.send('访问过于频繁，请稍后再试')
        } else {
            res.send('成功')
        }
    })
})


app.listen(3000, () => {
    console.log('Server is running on port 3000');
})